<?php

class movimientos extends Basemovimientos
{
    //Declaracion de las variables

    protected $monto_egresoViejo;
    protected $monto_ingresoViejo;

    private function getMontoIngresoViejo(){
       return $this->monto_ingresoViejo;
    }
    private function setMontoIngresoViejo($v){
       return $this->monto_ingresoViejo = $v;
    }
    private function getMontoEgresoViejo(){
       return $this->monto_egresoViejo;
    }
    private function setMontoEgresoViejo($v){
        $this->monto_egresoViejo = $v;
    }
    public function setMontoEgreso($v){
         $this->setMontoEgresoViejo($this->getMontoEgreso());
         return parent::setMontoEgreso($v);
    }
    
    public function setMontoIngreso($v){
         $this->setMontoIngresoViejo($this->getMontoIngreso());
         return parent::setMontoIngreso($v);
    }
   //Fin de las declaraciones


    public static function CierreCaja($id){
        //Mantenimiento realizado
        //Se borro esto= where created_at between  "'.$fecha_inicio.'" and  "'.$fecha_fin.'"
        //$fecha_inicio, $fecha_fin
        $c = Propel::GetConnection();
        $consulta = 'Select categorias , sum( monto_ingreso) as Total_Ingreso,
                     sum(monto_egreso) as Total_Egreso
                     From movimientos
                     where cierre_caja_id = '.$id.'
                     group by categorias';
        $sentencia = $c->prepare($consulta);
        $sentencia->execute();
        $cierre_caja = array(array());$e=0;
        while($filas = $sentencia->fetch()){
            $cierre_caja[$e]['categorias']      = $filas['categorias'];
            $cierre_caja[$e]['Total_Ingreso']   = $filas['Total_Ingreso'];
            $cierre_caja[$e++]['Total_Egreso']  = $filas['Total_Egreso'];
        }
        if($e)
          return $cierre_caja;
        return null;
    }
    private function BorrarRegistrosAnteriores($fecha){
         $c = Propel::GetConnection();
         $consulta = 'Delete From
                      cierre_de_caja
                      where created_at =  "'.$fecha.'"';
        $sentencia = $c->prepare($consulta);
        $sentencia->execute();
    }
    private function CerrarCaja(){

        //Obtener el Rango de Fechas
        $fecha_inicio = $this->getCreatedAt('Y-m-d');
        list($anho,$mes,$dia)=split('-',$fecha_inicio);
        $dia = intval($dia) +1;
        $fecha_fin    = $anho.'-'.$mes.'-'.$dia;
        //Listo
        //Borrando los Registros Anteriores
        $this->BorrarRegistrosAnteriores($fecha_inicio);
        //Obteniendo el Ultimo registro
        $criteria = New Criteria;
        $criteria->addDescendingOrderByColumn(cierre_de_cajaPeer::ID);
        $cierre_caja = cierre_de_cajaPeer::doSelectOne($criteria);
        //$cierre_caja = DbFinder::from('cierre_de_caja')->
        //               findLast();

           if (!$cierre_caja)
               $ultimo_saldo=0;
           else
              $ultimo_saldo =$cierre_caja->getMontoSaldo();
           $caja = new cierre_de_caja();
           $caja->setCategorias('Cierre Dia Anterior');
           $caja->setMontoIngreso($ultimo_saldo);
           $caja->setMontoSaldo($ultimo_saldo);
           $caja->setCreatedAt($this->getCreatedAt('Y-m-d'));
           $caja->save();
           //$ultimo_saldo =$cierre_caja->getMontoSaldo();
        //}
        //
        //Agregando los Movimientos Anteriores
        
           
        
        $cierre_movimiento = movimientos::CierreCaja($fecha_inicio,  $fecha_fin );
        if($cierre_movimiento)
         foreach($cierre_movimiento as $cierre){
               $caja = new cierre_de_caja();
               $caja->setCategorias($cierre['categorias']);
               $caja->setMontoIngreso($cierre['Total_Ingreso']);
               $caja->setMontoEgreso($cierre['Total_Egreso']);
               $ultimo_saldo = $ultimo_saldo +$cierre['Total_Ingreso'] - $cierre['Total_Egreso'];
               $caja->setMontoSaldo($ultimo_saldo);
               $caja->setCreatedAt($this->getCreatedAt('Y-m-d'));
               $caja->save();
         }
    }
    public function BuscarCajaAbierta(){
        $criteria = new criteria;
        $criteria->addDescendingOrderByColumn(cierre_de_cajaPeer::CREATED_AT);
        $cierredecaja = cierre_de_cajaPeer::doSelectOne($criteria);
        if($cierredecaja){
            if(!$cierredecaja->getAbierto()){
               $cierredecaja2 = new cierre_de_caja();
               $cierredecaja2->setCierreAnterior($cierredecaja->getMontoSaldo());
               $cierredecaja2->save();
               return $cierredecaja2->getId();
            }
            else {
               return $cierredecaja->getId();
            }
        }
        $cierredecaja = new cierre_de_caja();
        $cierredecaja->save();
        return  $cierredecaja->getId();
    }

    /* Comentado para poder auditar mejor los cambios
     * public function save(PropelPDO $con = null){
        
        $this->SumarCierre();
        $affectedRows = parent::save($con);
        return $affectedRows;
    }*/
    /*protected function doSave(PropelPDO $con){
        $this->SumarCierre(2);
        $affectedRows = parent::dosave($con);
        return $affectedRows;
        //return 1;
    }*/
    public function save(PropelPDO $con = null){
        
        $affectedRows = parent::save($con);
        $this->SumarCierre();
        return $affectedRows;
    }
    private function SumarCierre($viejo = null){
        $ingresos=0;$egresos  =0;
        $totales = self::CierreCaja($this->getCierreCajaId());
        foreach($totales as $total){
            $ingresos += $total['Total_Ingreso'];
            $egresos  += $total['Total_Egreso'];
        }
        $cierre = $this->getcierre_de_caja();
        $cierre->setMontoEgreso($egresos);
        $cierre->setMontoIngreso($ingresos);
        $cierre->setMontoSaldo($cierre->getMontoIngreso()+$cierre->getCierreAnterior()-$cierre->getMontoEgreso());
        $cierre->save(); 
        
        /*
         * Todo a la Mierda estaba todo mal
         * if ($this->isNew()){
           
        }
        else{
            //Aca esta remal mi Cierre de Caja
            $cierre = $this->getcierre_de_caja();
           $cierre->setMontoEgreso($cierre->getMontoEgreso()+$this->getMontoEgreso()-$this->getMontoEgresoViejo());
           $cierre->setMontoIngreso($cierre->getMontoIngreso()+$this->getMontoIngreso()-$this->getMontoIngresoViejo());
           $cierre->setMontoSaldo($cierre->getCierreAnterior()+$cierre->getMontoIngreso()-$cierre->getMontoEgreso());
           $cierre->save();

        }*/
        
    }
    private function BorrarMoviDelCierre(){
           $cierre = $this->getcierre_de_caja();
           $cierre->setMontoEgreso($cierre->getMontoEgreso()-$this->getMontoEgreso());
           $cierre->setMontoIngreso($cierre->getMontoIngreso()-$this->getMontoIngreso());
           $cierre->setMontoSaldo($cierre->getMontoIngreso()+$cierre->getCierreAnterior()-$cierre->getMontoEgreso());
           $cierre->save();
    }


    public function delete(PropelPDO $con = null){
       $this->BorrarMoviDelCierre();
        parent::delete($con);
      // $this->CerrarCaja();
    }
}
